package Thread;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.BlockingQueue;

/**
 * 多线程代码实例2: 阻塞队列
 */

/**
 * 对阻塞队列的简单介绍
 * 1.线程安全
 * 2.具有阻塞特性
 *   (1) 如果队列为空,进行出队列操作,此时就会出现阻塞,
 *       一直阻塞到其他线程往队列中添加元素为止
 *   (2)如果队列为满,进行入队列操作,此时也会出现阻塞,
 *       一直阻塞到其他线程从队列中取走元素为止
 */
//基于阻塞队列最大的应用场景就是实现生产者消费者模型

public class Demo30 {
    public static void main(String[] args) throws InterruptedException {
        BlockingQueue<String> queue = new ArrayBlockingQueue<>(3);
        queue.put("111");
        System.out.println("put 成功");
        queue.put("111");
        System.out.println("put 成功");

        queue.take();
        System.out.println("take 成功");
        queue.take();
        System.out.println("take 成功");
        queue.take();
        System.out.println("take 成功");
    }
}
